package top.jacktgq.sxt.bio.tcp.demo10;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @Author CandyWall
 * @Date 2019/10/21--14:21
 * @Description 模拟登录 双向：验证客户端的账号密码是否正确，并且给出响应
 *                 服务器端：
 *                  1、指定端口 使用ServerSocket创建服务器
 *                  2、阻塞式等待连接 accept
 *                  3、操作：输入输出流
 *                  4、释放资源
 */
public class TCPLoginServer {
    public static void main(String[] args) throws IOException {
        //1、指定端口 使用ServerSocket创建服务器
        ServerSocket serverSocket = new ServerSocket(8888);
        //2、阻塞式等待连接 accept
        Socket server = serverSocket.accept();
        System.out.println("一个客户端建立了连接！");
        DataInputStream dis = null;
        DataOutputStream dos = null;

        //3、操作：输入输出流
        dis = new DataInputStream(server.getInputStream());
        //获取输出流
        dos = new DataOutputStream(server.getOutputStream());
        while (true) {
            String content = dis.readUTF();
            //将获取到的登录参数进行解析
            String username = null;
            String password = null;
            //先根据&符号进行分割
            String[] strs = content.split("&");
            for (String str : strs) {
                //再根据=号进行分割
                String[] params = str.split("=");
                if (params[0].equals("username")) {
                    username = params[1];
                } else if (params[0].equals("password")) {
                    password = params[1];
                }
            }
            System.out.println("username:" + username + ",password:" + password);
            //客户端密码是否正确
            String result = "密码错误";
            if ("candywall".equals(username) && "123456".equals(password)) {
                result = "密码正确";
            }
            //将结果写给客户端

            dos.writeUTF(result);
            if (result.equals("密码正确")) {
                break;
            }
        }
        //4、释放资源
        dis.close();
        dos.close();
        server.close();
        serverSocket.close();
    }
}
